﻿/*======================================================================
== Copyright : BlueCurve (c)
== Licence   : Gnu/GPL v2.x
== Author    : Teddy Albina
== Email     : bluecurveteam@gmail.com
== Web site  : http://www.codeplex.com/BlueCurve
========================================================================*/
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using BlueCurve.EnumAction;

namespace BlueCurve.IndexationContract
{
    /// <summary>
    /// Définit une meta données
    /// </summary>
    [DataContract]
    public class Meta
    {
        /// <summary>
        /// Valeur de la méta donnée
        /// </summary>
        [DataMember]
        public string Value { get; private set; }
        /// <summary>
        /// Indication de "tokenisation"
        /// </summary>7
        [DataMember]
        public Tokenize TokenValue { get; private set; }

        /// <summary>
        /// Constructeur
        /// </summary>
        public Meta() { }

        /// <summary>
        /// Constructeur
        /// </summary>
        public Meta(string value, Tokenize token)
        {
            this.Value = value;
            this.TokenValue = token;
        }
    }

    /// <summary>
    /// Défini l'action à effectuer sur une 
    /// méta données
    /// </summary>
    [DataContract]
    public enum Tokenize
    {
        /// <summary>
        /// Permet la tokenization du document
        /// </summary>
        [EnumMember]
        YES,
        /// <summary>
        /// Permet la non tokenization du document
        /// </summary>
        [EnumMember]
        NO
    }

    /// <summary>
    /// Définit les données d'indexation
    /// </summary>
    [DataContract]
    public class IndexationData 
    {
        /// <summary>
        /// Constructeur
        /// </summary>
        public IndexationData() { }

        /// <summary>
        /// Titre du document
        /// </summary>
        [DataMember]
        public string Title { get; set; }

        /// <summary>
        /// Miniature du fichier
        /// </summary>
        [DataMember]
        public string Thumbnail { get; set; }

        /// <summary>
        /// Contenu du document
        /// </summary>
        [DataMember]
        public string Text { get; set; }

        /// <summary>
        /// Description du document
        /// </summary>
        [DataMember]
        public string Description { get; set; }

        /// <summary>
        /// Taille du document
        /// </summary>
        [DataMember]
        public float Size { get; set; }

        /// <summary>
        /// Url/Path du document
        /// </summary>
        [DataMember]
        public string Path { get; set; }

        /// <summary>
        /// Langue du document
        /// </summary>
        [DataMember]
        public string Language { get; set; }

        /// <summary>
        /// Date de la dernière modification du document
        /// </summary>
        [DataMember]
        public DateTime LastModified { get; set; }

        /// <summary>
        /// Date de création du document
        /// Utiliser que pour les indexations de documents
        /// ne provenant pas du net
        /// </summary>
        [DataMember]
        public DateTime CreationDate { get; set; }

        /// <summary>
        /// Date du dernier accès au document
        /// </summary>
        [DataMember]
        public DateTime LastAccess { get; set; }

        /// <summary>
        /// Type mime du document
        /// </summary>
        [DataMember]
        public string ContentType { get; set; }

        /// <summary>
        /// Définit si le document provient d'un autre emplacement que le web
        /// false/null => viens du web
        /// true => autre
        /// </summary>
        [DataMember]
        public bool IsDesktop { get; set; }

        /// <summary>
        /// Dictionnaire de méta données, auteur etc...
        /// </summary>
        [DataMember]
        public Dictionary<string, Meta> MetaDatas = new Dictionary<string, Meta>();

        /// <summary>
        /// Action to do
        /// </summary>
        [DataMember]
        public IndexAction Action = IndexAction.UNDEF;

        /// <summary>
        /// Old document Path
        /// </summary>
        [DataMember]
        public string OldPath { get; set; }

        /// <summary>
        /// Mots clefs
        /// </summary>
        [DataMember]
        public string KeyWords  { get; set; }

        /// <summary>
        /// Liste de liens avec leur "ancre"
        /// </summary>
        [DataMember]
        public Dictionary<string, string> LinksAndAnchor = new Dictionary<string, string>();

        /// <summary>
        /// Liste des liens
        /// </summary>
        [DataMember]
        public List<string> Links = new List<string>();

        /// <summary>
        /// Flux Rss contenus dans le document
        /// </summary>
        [DataMember]
        public List<string> RssFeeds = new List<string>();

        /// <summary>
        /// Laps de temps avant de revenir indexer le document
        /// </summary>
        [DataMember]
        public int RevisitAfter { get; set; }
    }
}
